package com.yantong.service;

import com.yantong.pojo.*;
import com.yantong.pojo.vo.*;
import com.yantong.utils.PageUtils;

import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 商户商品服务
 * @author kanghaixin
 */
public interface ProductCentreService {
	/**
	 * 保存
	 * 
	 * @param ids
	 * @return
	 * @author baolingyu
	 * @date 2018年8月28日-上午11:46:11
	 */
	int save(List<Long> ids, Long centreId);
	/**
	 * 保存
	 *
	 * @param ids
	 * @return
	 * @author baolingyu
	 * @date 2018年8月28日-上午11:46:11
	 */
	int save(List<Long> ids, Long centreId, Long teamId);

	/**
	 * 详情
	 *
	 * @param id
	 * @return
	 * @author baolingyu
	 * @date 2018年8月28日-上午11:46:18
	 */
	ProductCentre getByKey(Long id);

	/**
	 * 更新
	 *
	 * @param obj
	 * @return
	 * @author baolingyu
	 * @date 2018年8月28日-上午11:46:25
	 */
	int update(ProductCentreVo obj);

	/**
	 * 删除
	 * @param id
	 * @return
	 * @author baolingyu
	 * @date 2018年8月28日-上午11:46:32
	 */
	int remove(Long id);

	/**
	 * 更新库存
	 * @param id
	 * @return
	 * @author baolingyu
	 * @date 2018年8月28日-上午11:46:32
	 */
	int updateDisplayorder(Long id, Integer displayorder);

	/**
	 * 商户商品列表
	 * @param offset
	 * @param limit
	 * @param vo
	 * @return
	 * @author baolingyu
	 * @date 2018年9月11日-下午7:16:57
	 */
	PageUtils<ProductCentre> listCentreProducts(int offset, int limit, ProductCentreVo vo, String idOrName);


	/**
	 * 得到商品利润表
	 */
	PageUtils<ProductCentreCostVo> getProductCentreCostVo(int offset, int limit, ProductsReqVo productsReqVo);

	/**
	 * 商户商品列表
	 * @param offset
	 * @param limit
	 * @param productsReqVo
     * @return
     */
	PageUtils<ProductCentre> listCentreProducts(int offset, int limit, ProductsReqVo productsReqVo);


	/**
	 * 商户商品列表 前端用
	 * @param offset
	 * @param limit
	 * @param productsReqVo
     * @return
     */
	PageUtils<ProductCentre> getListCentreProducts(int offset, int limit, ProductsReqVo productsReqVo);

	/**
	 * 商户商品列表 前端用
	 * @param offset
	 * @param limit
	 * @param productsReqVo
	 * @return
	 */
	PageUtils<ProductCentre> getListShopkeeperProducts(int offset, int limit, ProductsReqVo productsReqVo);

	/**
	 * 商户商品列表
	 * @param offset
	 * @param limit
	 * @param productsReqVo
     * @return
     */
	 List<ProductCentre>  getExportProductCentre(ProductCentreVo vo, String idOrName);

	/**
	 * 商品名称搜索商品
	 * @param id
	 * @param title
	 * @param centreId
	 * @param offset
	 * @param limit
     * @return
     */
	PageUtils<ProductCentre> listByTitleAndId(Long id, String title, Long centreId, Long teamId, int offset, int limit);


	/**
	 * 商品名称搜索商品多个商户
	 * @param id
	 * @param title
	 * @param centreId
	 * @param offset
	 * @param limit
     * @return
     */
	PageUtils<ProductCentre> listByTitleAndCentreId(Long id, String title, List<String> centreId, int offset, int limit);

	/**
	 * 商品详情
	 * 商城获取商户商品详情
	 * @param pcId 商户商品ID
	 * @return
     */
	ProductCentre getProductDetail(Long pcId);

	/**
	 * 获取商品在购物车存在的数量
	 * @param mid
	 * @param productId
     * @return
     */
	int getProductInCartNum(Long mid, Long productId);

	/**
	 * 商品详情，带规格+属性+sku
	 * @param id
	 * @return
	 * @author baolingyu
	 * @date 2018年9月18日-下午4:04:41
	 */
	ProductCentreVo detail(Long id);

	/**
	 * 商户新增商品
	 * @param obj
	 * @return
	 * @author baolingyu
	 * @date 2018年9月29日-下午5:07:02
	 */
	int add(ProductCentreVo obj, Long centreId);

	/**
	 *
	 * 根据商品ID查询商品详情信息
	 * @param productId
	 * @return
	 */
	ProductCentre getProductCentreToProductId(Long productId);

	/**
	 * 获取商品分享图片
	 * @param mid 门店ID
	 * @param productId 商品Id
	 * @param detailUrl 商品详情链接，二维码识别信息
	 * @return
	 * @throws FileNotFoundException
     */
	String getProductShareUrl(Long mid, Long productId, String detailUrl, String teamId) throws FileNotFoundException;

	/**
	 * 获取商品分享图片数据
	 * @param mid 门店ID
	 * @param productId 商品Id
	 * @param detailUrl 商品详情链接，二维码识别信息
	 * @return
	 * @throws FileNotFoundException
     */
	ProductShareVo getProductShareData(Long mid, Long productId, String detailUrl, String teamId, Integer productType) throws FileNotFoundException;

	/**
	 * 获取公众号商品分享图片数据
	 * @param mid 门店ID
	 * @param productId 商品Id
	 * @param detailUrl 商品详情链接，二维码识别信息
	 * @return
	 * @throws FileNotFoundException
	 */
	ProductShareVo getProductShareDataQrCode(Long mid, Long productId, String detailUrl, String teamId, Integer productType) throws FileNotFoundException;

	/**
	 * 商品列表页面，点击按钮更新商品
	 * @param id
	 * @param column
	 * @return
	 * @author baolingyu
	 * @date 2018年10月8日-下午9:39:56
	 */
	int btnUpdate(Long id, String column);

	/**
	 * 更新库存
	 * @param id
	 * @param total
	 * @return
	 * @author baolingyu
	 * @date 2018年10月15日-下午2:15:39
	 */
	int updateTotal(Long id, Integer total);


	/**
	 * 批量获取商品销量和库存
	 * @param productIds
	 * @param mid  当前查询接口的会员ID
	 * @return
	 */
	Map<Long, SalesStockVo> getProductSalesStocks(List<Long> productIds, Long mid);

	/**
	 * 获取详情，带缓存
	 * @param id
	 * @return
	 */
	ProductCentre getByKeyWithCache(Long id);

	/**
	 * 获取SKU 带缓存
	 * @param centreSkuId
	 * @return
	 */
	ProductSkuCentre getSkuByKeyWithCache(Long centreSkuId);

	/**
	 * 获取sku
	 * @param centreSkuId
	 * @return
	 */
	ProductSkuCentre getSkuByKey(Long centreSkuId);

	/**
	 * 更新库存
	 * @param total
	 * @param pc
	 * @return
	 */
	int changeStock(int total, ProductCentre pc);
	int changeStock(int total, Long productId);

    /**
     * 退还库存
     * @param total
     * @param pc
     * @return
     */
	int refundStock(int total, ProductCentre pc);

	/**
	 * 更新sku库存
	 * @param total
	 * @param psc
	 * @return
	 */
	int changeSkuStock(int total, ProductSkuCentre psc);
	int changeSkuStock(int total, Long skuId);

    /**
     * 退还sku库存
     * @param total
     * @param psc
     * @return
     */
	int refundSkuStock(int total, ProductSkuCentre psc);

	/**
	 * 批量审核商品
	 * @param ids
	 * @return
	 * @author baolingyu
	 * @date 2018年11月19日-下午3:21:29
	 */
	int batchAudit(List<Long> ids);

	/**
	 * 批量修改商品序号排序
	 * @param product
	 * @return
	 */
	int updateSort(Product product);
	/**
	 * 通过包含主键的Map更新商户商品字段
	 * @param updMap
	 * @return
	 */
	int changeCentreProductByIdMap(Map<Object, Object> updMap);


	/**
	 * 得到商品利润表
	 */
	List<ProductCentreCostVo> getProductCentreCostVoData(Map<String, Object> map);


	/**
	 * 得到平台总成本
	 * @param map
	 * @return
	 */
	String getPlacostprice(Map<String, Object> map);

	/**
	 * 得到平台销售总额
	 * @param map
	 * @return
	 */
	String getPlapricetotal(Map<String, Object> map);

	/**
	 * 得到contre商品的所有订单
	 * @param map
	 * @return
	 */
	ProductCentreCostVo getProductCentreById(Map<String, Object> map);

	int updateGrandTotal(Long id, Integer total);

	/**
	 * 根据商品id获取商品信息
	 * @param pcId
	 * @return   ProductCentre
	 */
    ProductCentre getProductCentre(Long pcId);

	int batchUpdateSales(List<Long> asList, int sales);

	/**
	 * 复制单品
	 * @param productId
	 * @return
	 */
	int copyProductCentre(Long productId, String centerId, String teamId, Integer productType);

	/**
	 * 拔资料库商品
	 * @param ids
	 * @param centreId
	 * @return
	 */
   int saveByProductDataId(List<ProductCentreVo> ids, Long centreId);

   /**
    * 小程序二维码
    * @param vo
    * @return
    */
   String getAppQrcode(QrCodeVo vo);

   List<ProductSkuCentre> getSkuListByProductId(Long productId);

	ProductSkuCentre getSkuBySpecs(String specs);

	PageUtils<ProductCentre> getCashierProductList(HashMap<String, Object> map, Integer offset, Integer limit);

	List<ProductCentre> getAllCentreProductByType(ProductsReqVo productsReqVo);

	PageUtils<ProductCentre> centreProductByTypePage(ProductsReqVo productsReqVo, Integer offset, Integer limit);

	int updateProductCenter(ProductCentre productCentre);

	int updateProductSkuCenter(ProductSkuCentre productSkuCentre);

	int updateProductCentreStatus(Long id, Integer status);

	int saveProductByData(List<Long> ids, Long centreId, Long liansuoid);

	int getProductCenterSales(Long productId, Long skuId);

	int insertProductCentreAttribute(ProductCentreAttribute productCentreAttribute);
	int deleteProductCentreAttribute(Long pcId);
	int updateProductCentreAttribute(ProductCentreAttribute productCentreAttribute);
	ProductCentreAttribute getProductCentreAttributeByPcId(Long pcId);
}

